package com.second.hand.trading.server.config;

import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

/**
 * 支付宝SDK配置类
 * 该类用于从配置文件中读取支付宝相关参数，并在项目启动时初始化支付宝SDK的全局配置。
 */
@Component
@ConfigurationProperties(prefix = "alipay") // 绑定配置文件中以 alipay 开头的属性
public class AliPayConfig {
    private String appId; // 支付宝应用ID
    private String appPrivateKey; // 商户私钥
    private String alipayPublicKey; // 支付宝公钥
    private String notifyUrl; // 支付宝异步通知回调地址

    /**
     * 项目启动后自动调用此方法，完成支付宝SDK的全局参数初始化
     */
    @PostConstruct
    public void init() {
        // 创建支付宝SDK配置对象
        Config config = new Config();
        config.protocol = "https"; // 通信协议
        config.gatewayHost = "openapi.alipaydev.com"; // 支付宝网关地址（沙箱环境）
        config.signType = "RSA2"; // 签名类型
        config.appId = this.appId; // 应用ID
        config.merchantPrivateKey = this.appPrivateKey; // 商户私钥
        config.alipayPublicKey = this.alipayPublicKey; // 支付宝公钥
        config.notifyUrl = this.notifyUrl; // 异步通知回调地址
        // 设置全局配置，后续SDK调用会自动使用这些参数
        Factory.setOptions(config);
        System.out.println("=======支付宝SDK初始化成功=======");
    }

    // 以下为属性的getter和setter方法，供Spring自动注入和外部调用
	public String getAppId() {
		return appId;
	}

	public String getAppPrivateKey() {
		return appPrivateKey;
	}

	public String getAlipayPublicKey() {
		return alipayPublicKey;
	}

	public String getNotifyUrl() {
		return notifyUrl;
	}

	public void setAppId(String appId) {
		this.appId = appId;
	}

	public void setAppPrivateKey(String appPrivateKey) {
		this.appPrivateKey = appPrivateKey;
	}

	public void setAlipayPublicKey(String alipayPublicKey) {
		this.alipayPublicKey = alipayPublicKey;
	}

	public void setNotifyUrl(String notifyUrl) {
		this.notifyUrl = notifyUrl;
	}

	@Override
	public String toString() {
		return "AliPayConfig{" +
				"appId='" + appId + '\'' +
				", appPrivateKey='" + appPrivateKey + '\'' +
				", alipayPublicKey='" + alipayPublicKey + '\'' +
				", notifyUrl='" + notifyUrl + '\'' +
				'}';
	}

}